using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._DataManagement._Features
{
    /// <summary>
    /// <para>Update GeoNames</para>
    /// <para>Updates the name field on input features based on the information from GeoNames_FeaturesP and GEONAMES_TABLE.</para>
    /// <para>根据来自GeoNames_FeaturesP和GEONAMES_TABLE的信息更新输入要素的名称字段。</para>
    /// </summary>    
    [DisplayName("Update GeoNames")]
    public class UpdateGeoNames : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpdateGeoNames()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The input features that will be updated. Each Input Features value should have field names matching the values specified for the Named Feature ID Field, Name ID Field, and Name Field parameters.</para>
        /// <para>将更新的输入要素。每个输入要素值的字段名称都应与为命名要素 ID 字段、名称 ID 字段和名称字段参数指定的值匹配。</para>
        /// </param>
        /// <param name="_in_geonames_features">
        /// <para>GeoNames Features</para>
        /// <para>The input GeoNames features that identify unique named feature locations.</para>
        /// <para>用于标识唯一命名要素位置的输入 GeoNames 要素。</para>
        /// </param>
        /// <param name="_in_geonames_table">
        /// <para>GeoNames Table</para>
        /// <para>A table containing name records related to the input GeoNames features.</para>
        /// <para>包含与输入 GeoNames 要素相关的名称记录的表。</para>
        /// </param>
        /// <param name="_named_feature_id_field">
        /// <para>Named Feature ID Field</para>
        /// <para>The field storing GeoNames named feature identifier values. These values should not be null or empty on the input features.</para>
        /// <para>存储 GeoNames 命名要素标识符值的字段。在输入要素上，这些值不应为空或为空。</para>
        /// </param>
        /// <param name="_name_id_field">
        /// <para>Name ID Field</para>
        /// <para>The field to store GeoNames name identifier values.</para>
        /// <para>用于存储 GeoNames 名称标识符值的字段。</para>
        /// </param>
        /// <param name="_name_field">
        /// <para>Name Field</para>
        /// <para>The field to store GeoNames name values.</para>
        /// <para>用于存储 GeoNames 名称值的字段。</para>
        /// </param>
        public UpdateGeoNames(List<object> _in_features, object _in_geonames_features, object _in_geonames_table, object _named_feature_id_field, object _name_id_field, object _name_field)
        {
            this._in_features = _in_features;
            this._in_geonames_features = _in_geonames_features;
            this._in_geonames_table = _in_geonames_table;
            this._named_feature_id_field = _named_feature_id_field;
            this._name_id_field = _name_id_field;
            this._name_field = _name_field;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "Update GeoNames";

        public override string CallName => "topographic.UpdateGeoNames";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _in_geonames_features, _in_geonames_table, _named_feature_id_field, _name_id_field, _name_field, _out_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The input features that will be updated. Each Input Features value should have field names matching the values specified for the Named Feature ID Field, Name ID Field, and Name Field parameters.</para>
        /// <para>将更新的输入要素。每个输入要素值的字段名称都应与为命名要素 ID 字段、名称 ID 字段和名称字段参数指定的值匹配。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_features { get; set; }


        /// <summary>
        /// <para>GeoNames Features</para>
        /// <para>The input GeoNames features that identify unique named feature locations.</para>
        /// <para>用于标识唯一命名要素位置的输入 GeoNames 要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GeoNames Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geonames_features { get; set; }


        /// <summary>
        /// <para>GeoNames Table</para>
        /// <para>A table containing name records related to the input GeoNames features.</para>
        /// <para>包含与输入 GeoNames 要素相关的名称记录的表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GeoNames Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_geonames_table { get; set; }


        /// <summary>
        /// <para>Named Feature ID Field</para>
        /// <para>The field storing GeoNames named feature identifier values. These values should not be null or empty on the input features.</para>
        /// <para>存储 GeoNames 命名要素标识符值的字段。在输入要素上，这些值不应为空或为空。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Named Feature ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _named_feature_id_field { get; set; }


        /// <summary>
        /// <para>Name ID Field</para>
        /// <para>The field to store GeoNames name identifier values.</para>
        /// <para>用于存储 GeoNames 名称标识符值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Name ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _name_id_field { get; set; }


        /// <summary>
        /// <para>Name Field</para>
        /// <para>The field to store GeoNames name values.</para>
        /// <para>用于存储 GeoNames 名称值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _name_field { get; set; }


        /// <summary>
        /// <para>Updated Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_features { get; set; }


        public UpdateGeoNames SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}